package com.atguigu.yygh.hosp.receiver;

import com.atguigu.common.rabbit.constant.MqConst;
import com.atguigu.common.rabbit.service.RabbitService;
import com.atguigu.yygh.hosp.service.ScheduleService;
import com.atguigu.yygh.model.hosp.Schedule;
import com.atguigu.yygh.vo.msm.MsmVo;
import com.atguigu.yygh.vo.order.OrderMqVo;
import com.rabbitmq.client.Channel;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.Exchange;
import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.QueueBinding;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * @author ybl
 * @version 1.9
 * @date 2021/5/24 12:21
 * mq 监听器
 */
@Component
public class HospitalReceiver {

  @Autowired
  private ScheduleService scheduleService;

  @Autowired
  private RabbitService rabbitService;

  @RabbitListener(bindings = @QueueBinding(
      value = @Queue(value = MqConst.QUEUE_ORDER,durable = "true"),
      exchange = @Exchange(value = MqConst.EXCHANGE_DIRECT_ORDER),
      key = {MqConst.ROUTING_ORDER}
  ))
  public void receiver(OrderMqVo orderMqVo, Message message, Channel channel){

    if (orderMqVo.getAvailableNumber() != null) {
      // 下单成功更新预约数量
      Schedule schedule = scheduleService.getSchedule(orderMqVo.getScheduleId());
      schedule.setReservedNumber(orderMqVo.getReservedNumber());
      schedule.setAvailableNumber(orderMqVo.getAvailableNumber());
      scheduleService.update(schedule);
    }else {
      //取消预约更新预约数
      Schedule schedule = scheduleService.getSchedule(orderMqVo.getScheduleId());
      int availableNumber = schedule.getAvailableNumber().intValue() + 1;
      schedule.setAvailableNumber(availableNumber);
      scheduleService.update(schedule);
    }

    // 发送短信
    MsmVo msmVo = orderMqVo.getMsmVo();
    if (null != msmVo) {
      rabbitService.sendMessage(MqConst.EXCHANGE_DIRECT_MSM,MqConst.ROUTING_MSM_ITEM,msmVo);
    }
  }

}
